import axios from 'axios'

// 防重复弹窗
let loginExpiredModalShown = false
// 区分开发和生产环境
const DEV_BASE_URL = 'http://localhost:8124'
const PROD_BASE_URL = 'https://www.tao-picture.ittao.asia'
const myAxios = axios.create({
	baseURL: PROD_BASE_URL,
	timeout: 0, // 请求连接不过期
	withCredentials: true,
})

// 全局请求拦截器
myAxios.interceptors.request.use(
	function (config) {
		return config
	},
	function (error) {
		return Promise.reject(error)
	}
)

// 全局响应拦截器
myAxios.interceptors.response.use(
	function (response) {
		const { data } = response
		// 未登录
		if (data.code === 40100) {
			// 不是获取用户信息的请求，并且用户目前不是已经在用户登录页面，则显示登录过期弹窗
			if (
				!response.request.responseURL.includes('user/get/login') &&
				!window.location.pathname.includes('/user/login')
			) {
				// 防止重复弹窗
				if (!loginExpiredModalShown) {
					loginExpiredModalShown = true

					// 动态导入状态管理
					Promise.all([import('@/stores/useAuthStore'), import('@/stores/useLoginUserStore')])
						.then(([{ useAuthStore }, { useLoginUserStore }]) => {
							// 先清除用户登录状态
							const loginUserStore = useLoginUserStore()
							loginUserStore.clearLoginUser()

							// 再显示登录过期弹窗
							const authStore = useAuthStore()
							const currentUrl = window.location.pathname + window.location.search + window.location.hash
							authStore.showLoginExpiredModal(currentUrl)

							// 3秒后重置防重复标志，缩短时间让体验更好
							setTimeout(() => {
								loginExpiredModalShown = false
							}, 3000)
						})
						.catch(console.error)
				}
			}
		}
		return response
	},
	function (error) {
		// 处理网络错误或其他错误
		console.error('请求错误:', error)
		return Promise.reject(error)
	}
)

export default myAxios
